#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
密码加密工具
用于生成数据库中使用的密码哈希值
"""

from werkzeug.security import generate_password_hash, check_password_hash
import sys


def generate_hash(plain_password):
    """
    生成密码哈希值
    
    Args:
        plain_password: 明文密码
    
    Returns:
        str: 密码哈希值
    """
    # 使用与后端一致的加密方式
    # method='pbkdf2:sha256', salt_length=16
    hash_value = generate_password_hash(
        plain_password,
        method='pbkdf2:sha256',
        salt_length=16
    )
    return hash_value


def verify_hash(plain_password, hash_value):
    """
    验证密码是否正确
    
    Args:
        plain_password: 明文密码
        hash_value: 密码哈希值
    
    Returns:
        bool: 是否匹配
    """
    return check_password_hash(hash_value, plain_password)


if __name__ == "__main__":
    print("""
╔════════════════════════════════════════════════════════════╗
║   密码加密工具                                             ║
║   用于生成数据库密码哈希值                                 ║
╚════════════════════════════════════════════════════════════╝
    """)
    
    # 检查是否有命令行参数
    if len(sys.argv) > 1:
        password = sys.argv[1]
    else:
        # 交互式输入
        password = input("请输入要加密的密码: ").strip()
    
    if not password:
        print("❌ 错误：密码不能为空")
        sys.exit(1)
    
    # 生成哈希值
    print("\n🔐 正在生成密码哈希值...\n")
    hash_value = generate_hash(password)
    
    print("=" * 80)
    print(f"明文密码: {password}")
    print(f"哈希值:   {hash_value}")
    print("=" * 80)
    
    # 验证
    print("\n✅ 验证哈希值...")
    if verify_hash(password, hash_value):
        print("✅ 哈希值验证成功！可以安全使用。")
    else:
        print("❌ 哈希值验证失败！")
    
    print("\n💡 提示：将哈希值复制到数据库或脚本中使用")
    
    # 生成常用密码的哈希值
    if password in ['admin', '123456', 'password']:
        print("\n⚠️  警告：检测到弱密码！生产环境请使用强密码。")

